Re: [GENERAL] Two variable passed to PL/Function and on is NULL - Mailing list pgsql-general

From Stuart Rison
Subject Re: [GENERAL] Two variable passed to PL/Function and on is NULL
Date
Msg-id v04020a07b38ae1a52d86@[128.40.242.190]
Whole thread Raw
In response to Re: [GENERAL] Two variable passed to PL/Function and on is NULL  (Herouth Maoz <herouth@oumail.openu.ac.il>)
List pgsql-general
Hi Herouth,

>At 15:44 +0300 on 14/06/1999, Stuart Rison wrote:
>
>
>> i) Is it the case that if you pass to variables to a postgres function and
>> one is NULL, the function cannot tell which one?
>> ii) Is there a workaround of some kind (in particular in pl/pgsql)?
>> [Currently I am copying the table into a temp table and updating all NULL
>> values to a token value.]
>
>I think you will do alright in pl/pgsql. Take for example the following
>function which returns 1000 when its argument is null:
>

<snip - a function that works fine but take only one argument>

The problem only occur when you have a function which takes more than one
argument.

e.g.

create function null1000(int4,int4) returns int4 as '
DECLARE
  first_arg alias for $1;
  second_arg alias for $2;
BEGIN
        IF first_arg IS NULL THEN
                RETURN 1000;
  ELSE
                RETURN first_arg;
        END IF;
END;
'
language 'plpgsql';

cgh=> select * from test1;
 nm|nm_two
---+------
  4|
  8|
   |
 16|
 32|
 64|     6
128|     7
256|     8
512|     9
   |    10
(10 rows)

cgh=> select nm,nm_two,null1000(nm,nm_two) from test1;
 nm|nm_two|null1000
---+------+--------
  4|      |    1000
  8|      |    1000
   |      |    1000
 16|      |    1000
 32|      |    1000
 64|     6|      64
128|     7|     128
256|     8|     256
512|     9|     512
   |    10|    1000
(10 rows)

as soon a NULL is passed as an argument, both values are treated as NULL by
the function.  I think the problem occurs before you even enter the
function itself; in other words, both values become NULL 'internally' and
not within the function so you can't trap them in the function itself with
'IS NULL' checks.

I think this is a know issue with 6.4 but there was some suggestion it may
have been corrected in 6.5 (fact, fiction?)

furthermore, I'm unlikely to be moving to 6.5 in the near future so has
anyone got a workaround?

cheers,

S.

+-------------------------+--------------------------------------+
| Stuart Rison            | Ludwig Institute for Cancer Research |
+-------------------------+ 91 Riding House Street               |
| Tel. (0171) 878 4041    | London, W1P 8BT, UNITED KINGDOM.     |
| Fax. (0171) 878 4040    | stuart@ludwig.ucl.ac.uk              |
+-------------------------+--------------------------------------+

pgsql-general by date:

Previous
From: Ferruccio Zamuner
Date:
Subject: Re: Newbie disturbed about lack of CASE tools for PostgreSQL
Next
From: Steffen Zimmert
Date:
Subject: New Release 6.5